package com.xmotor.test_mvc_annotation;

import com.xmotor.vo.*;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 测试@PathVariable、@RequestParam、@RequestBody、@RequestHeader以及无注解的情况
 */
@RestController
@RequestMapping("/test-mvc-annotation")
public class TestMVCAnnotationController {

    //主要分为两种情况：
    // key-value形式：@RequestParam（可以省略），GET/POST请求皆可，对应application/x-www-form-urlencoded编码
    // json形式：@RequestBody（不可省略），只能POST请求，对应application/json编码

    // case 1
    // localhost:8080/controller-mvc-annotation/test1?id=1&name=aaa
    // 支持application/x-www-form-urlencoded编码
    // 可以获取url或者body中key-value形式的参数
    @RequestMapping("/test1")
    public void test1(Integer id,String name){
        System.out.println("id:"+id);
        System.out.println("name:"+name);
    }

    // case 2
    // localhost:8080/controller-mvc-annotation/5/Tony/test2
    // 可以获取url中拼接的参数
    @RequestMapping("/{id}/{name}/test2")
    public void test2(@PathVariable(value = "id")Integer id,
                      @PathVariable(value = "name")String name){
        System.out.println("id:"+id);
        System.out.println("name:"+name);
    }

    // case 3
    // 与第一种情况相同，默认必须要有这个参数
    @RequestMapping("/test3")
    public void test3(@RequestParam(value = "id")Integer id,
                      @RequestParam(value = "name", required = false)String name){
        System.out.println("id:"+id);
        System.out.println("name:"+name);
    }

    // case 4
    // 与第一种情况一样
    // 简单VO可以接收application/x-www-form-urlencoded
    // 没有@RequestBody注解不能以application/json编码传输
    @RequestMapping("/test4")
    public void test4(TestVO1 testVO1){
        System.out.println(testVO1);
    }

    // case 5
    // 复杂VO的传参方式
    // ?id=1&name=a&innerVO.innerVOId=11&innerVO.innerVOName=aa
    @RequestMapping("/test5")
    public void test5(TestVO2 testVO2){
        System.out.println(testVO2);
    }

    // case 6
    // 获取请求头Header中的参数
    @RequestMapping("/test6")
    public void test6(@RequestHeader(value = "token")String token){
        System.out.println("token:"+token);
    }

    // case 7
    // localhost:8080/test_enum-mvc-annotation/test7?list=aa&list=bb&list=cc&name=ddd
    @RequestMapping("/test7")
    public void test7(@RequestParam(value = "list",required = false) List<String> list,
                      @RequestParam(value = "name",required = false) String name){
        System.out.println("list:"+list);
        System.out.println("name:"+name);
    }

    // case 8
    // 以application/json编码传json格式参数
    // {
    //    "id":1,
    //    "name":"a",
    //    "strList":["a","b","c"],
    //    "innerVO":{
    //        "innerVOId":2,
    //        "innerVOName":"b"
    //    }
    // }
    @RequestMapping("/test8")
    public void test8(@RequestBody TestVO3 testVO3){
        System.out.println(testVO3);
    }

    @RequestMapping("/test9")
    public void test9(@RequestBody List<TestVO4> params) throws Exception{
        System.out.println(params);
    }


}
